/**
* Copyright (c) 2011 Cloudsmith Inc. and other contributors, as listed below.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Cloudsmith
*
*/
package org.cloudsmith.geppetto.forge.client;
import java.io.IOException;
import javax.inject.Named;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.StringBody;
import org.cloudsmith.geppetto.forge.model.Constants;
import com.google.gson.Gson;
import com.google.gson.annotations.Expose;
import com.google.inject.AbstractModule;
import com.google.inject.Inject;
/**
*/
public class OAuthModule extends AbstractModule implements Authenticator {
public static class OAuthResponse implements AuthResponse {
@Expose
private String scope;
@Expose
private String access_token;
public String getScopes() {
return scope;
}
public String getToken() {
return access_token;
}
}
private final String clientId;
private final String clientSecret;
private final String username;
private final String password;
@Inject
@Named(Constants.API_OAUTH_URL_NAME)
private String oauthURL;
@Inject
private Gson gson;
public OAuthModule(String clientId, String clientSecret, String username, String password) {
this.clientId = clientId;
this.clientSecret = clientSecret;
this.username = username;
this.password = password;
}
@Override
public AuthResponse authenticate(HttpClient httpClient) throws IOException {
HttpPost request = new HttpPost(oauthURL);
MultipartEntity entity = new MultipartEntity();
entity.addPart("grant_type", new StringBody("password"));
entity.addPart("client_id", new StringBody(clientId));
entity.addPart("client_secret", new StringBody(clientSecret));
entity.addPart("username", new StringBody(username));
entity.addPart("password", new StringBody(password));
request.setEntity(entity);
return httpClient.execute(request, new JSonResponseHandler<OAuthResponse>(gson, OAuthResponse.class));
}
@Override
protected void configure() {
bind(Authenticator.class).toInstance(this);
}
}